#include <iostream>
#include <semaphore.h>
namespace sem_module
{
    class Sem
    {
    private:
        sem_t _sem;

    public:
        Sem(unsigned int val)
        {
            sem_init(&_sem, 0, val);
        }
        void p()
        {
            int n = sem_wait(&_sem);//对计数器减一，该操作是原子的
            (void)n; 
        }
        void v()
        {
            int n = sem_post(&_sem);//对计数器加一，该操作是原子的
            (void)n;
        }
        ~Sem()
        {
            sem_destroy(&_sem);  
        }
    };
}
